package go_redisson

import (
	"fmt"
	"reflect"
	"time"
)

const DefaultMaxIdle = 1
const DefaultMaxActive = 10
const DefaultMaxIdleTimeout = 100
const DefaultConnectTimeout = 100
const DefaultReadTimeout = 100
const DefaultWriteTimeout = 100
const DefaultProtocol = "tcp"

type BaseConfig struct {
	IdleTimeout   time.Duration // 响应超时时间
	RetryAttempts int           // 重试次数
	RetryInterval int           // 重试间隔
	Protocol      string        // 协议
	Async         bool          // 是否同步
}

type SingleServerConfig struct {
	BaseConfig
	address  string // 主机地址
	database int    // 数据库编号

	Password string // 密码
	Username string // 用户名

	MaxActive      int           // 最大连接数
	MaxIdle        int           // 最大空闲数
	Wait           bool          // 无法获得连接是否等待
	ConnectTimeout time.Duration // 超时关闭连接
	ReadTimeout    time.Duration // 读超时
	WriteTimeout   time.Duration // 写超时
}

type Config struct {
	SingleServerConfig SingleServerConfig
}

// IsEmpty 判断 SingleServerConfig 是否为空
func (s SingleServerConfig) IsEmpty() bool {
	return reflect.DeepEqual(s, SingleServerConfig{})
}

// PrintConfig 打印配置
func PrintConfig(config Config) {
	// 使用反射获取Config的类型信息
	configType := reflect.TypeOf(config)
	configValue := reflect.ValueOf(config)

	// 遍历Config的字段
	for i := 0; i < configType.NumField(); i++ {
		field := configType.Field(i)
		fieldValue := configValue.Field(i)

		// 打印字段名和值
		fmt.Printf("%s: %v\n", field.Name, fieldValue.Interface())
	}
}
